// app/service/user.js
const BaseService = require('./base')
const { Op } = require('sequelize')
class RoleService extends BaseService {
	constructor(...args) {
		super(...args)
		this.modelName = 'Role'
	}
	async del(ids) {
		if (!Array.isArray(ids)) ids = [ids]

		let transaction
		try {
			// 建立事务对象
			transaction = await this.ctx.model.transaction()
			for (let i = 0; i < ids.length; i++) {
				const id = ids[i]
				const u = await this.ctx.model.RoleUser.findOne({
					where: {
						roleId: id,
					},
				})
				// 没找找到了数据证明存不存在关联，能进行删除
				if (!u) {
					console.log(id)
					let res = await this.ctx.model[this.modelName].destroy({
						where: {
							id: {
								[Op.eq]: id,
							},
						},
						transaction,
					})

					if (!res) {
						throw error //数据不存在就回滚
					}
				} else {
					// 找到了数据证明存在关联，不能进行删除并且抛出异常
					throw error
				}
			}
			// 提交事务
			await transaction.commit()
			return { flag: true }
		} catch (error) {
			// 事务回滚
			await transaction.rollback()
			return { flag: false, msg: '数据存在关联不能删除', code: 400 }
		}
	}
	async updateList(arr) {
		let count = 0
		for (let i = 0; i < arr.length; i++) {
			const role = arr[i]
			const u = await this.ctx.model[this.modelName].findOne({
				where: {
					name: {
						[Op.eq]: role.name,
					},
				},
			})
			// 没找到了数据证明不存在相同信息
			if (!u) {
				let res = await this.ctx.model[this.modelName].create(role)
				if (res) count++
			} else {
				// 找到了数据证明存在，不能进行添加
				continue
			}
		}
		return { flag: true, count }
	}
}

module.exports = RoleService
